static char __initdata opt_clocksource[10];
string_param("clocksource", opt_clocksource);
-unsigned long cpu_khz; /* CPU clock frequency in kHz. */
+unsigned long __read_mostly cpu_khz; /* CPU clock frequency in kHz. */
DEFINE_SPINLOCK(rtc_lock);
unsigned long pit0_ticks;
static u32 wc_sec, wc_nsec; /* UTC time at last 'time update'. */
static DEFINE_SPINLOCK(pit_lock);
static u16 pit_stamp16;
static u32 pit_stamp32;
-static int using_pit;
+static bool_t __read_mostly using_pit;
/*
* 32-bit division of integer dividend and integer divisor yielding
#define CYCLONE_TIMER_FREQ 100000000
/* Cyclone MPMC0 register. */
-static volatile u32 *cyclone_timer;
+static volatile u32 *__read_mostly cyclone_timer;
static u64 read_cyclone_count(void)
{
* PLATFORM TIMER 4: ACPI PM TIMER
*/
-u32 pmtmr_ioport;
+u32 __read_mostly pmtmr_ioport;
/* ACPI PM timer ticks at 3.579545 MHz. */
#define ACPI_PM_FREQUENCY 3579545
.init = init_pmtimer
};
-static struct time_scale pmt_scale;
-static struct time_scale pmt_scale_r;
+static struct time_scale __read_mostly pmt_scale;
+static struct time_scale __read_mostly pmt_scale_r;
+
static __init int init_pmtmr_scale(void)
{
set_time_scale(&pmt_scale, ACPI_PM_FREQUENCY);
* GENERIC PLATFORM TIMER INFRASTRUCTURE
*/
-static struct platform_timesource plt_src; /* details of chosen timesource */
-static u64 plt_mask; /* hardware-width mask */
-static u64 plt_overflow_period; /* ns between calls to plt_overflow() */
-static struct time_scale plt_scale; /* scale: platform counter -> nanosecs */
+/* details of chosen timesource */
+static struct platform_timesource __read_mostly plt_src;
+/* hardware-width mask */
+static u64 __read_mostly plt_mask;
+ /* ns between calls to plt_overflow() */
+static u64 __read_mostly plt_overflow_period;
+/* scale: platform counter -> nanosecs */
+static struct time_scale __read_mostly plt_scale;
/* Protected by platform_timer_lock. */
static DEFINE_SPINLOCK(platform_timer_lock);
local_irq_enable();
}
-void tsc_check_reliability(void)
+static void tsc_check_reliability(void)
{
unsigned int cpu = smp_processor_id();
static DEFINE_SPINLOCK(lock);
t->stime_master_stamp = now;
t->stime_local_stamp = now;
-
- if ( smp_processor_id() == 0 )
- {
- init_timer(&calibration_timer, time_calibration, NULL, 0);
- set_timer(&calibration_timer, NOW() + EPOCH);
- }
}
/*
init_percpu_time();
+ init_timer(&calibration_timer, time_calibration, NULL, 0);
+ set_timer(&calibration_timer, NOW() + EPOCH);
+
return 0;
}
int pit_broadcast_is_available(void)
{
- return xen_cpuidle;
+ return cpuidle_using_deep_cstate();
}
void send_timer_event(struct vcpu *v)
init_percpu_time();
+ set_timer(&calibration_timer, NOW() + EPOCH);
+
do_settime(get_cmos_time() + cmos_utc_offset, 0, NOW());
update_vcpu_system_time(current);